package cn.stylefeng.guns.sys.modular.system.service;

import cn.stylefeng.guns.sys.core.properties.TaskConfig;
import cn.stylefeng.guns.sys.core.properties.UrlConfig;
import cn.stylefeng.guns.sys.modular.system.entity.*;
import cn.stylefeng.guns.sys.modular.system.model.params.BtyMdYydzDetailParam;
import cn.stylefeng.roses.core.util.ToolUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Map;

@Service
public class PushMsgService {

    Logger logger = LoggerFactory.getLogger(PushMsgService.class);

    @Autowired
    private UrlConfig urlConfig;
    @Resource
    private TaskConfig taskConfig;

    @Async
    public void pushMsg(BtyGoodsPay btyGoodsPay, String dzMobile) {

        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
            //json.put("",);

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", dzMobile);//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17865157029");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "1");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            paramMap.add("temType", 1);//	是	Integer	消息模板类型 微信公众号消息时：1.审核结果通知模板 2.查询结果通知模板
            paramMap.add("title", "货赔录入提示");//	是	String	消息标题
            paramMap.add("catCode", 3);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加
            paramMap.add("contentTitle", "货赔录入");//	是	String	发布标题
            paramMap.add("content", "门店：" + btyGoodsPay.getDm());//

            RestTemplate restTemplate = new RestTemplate();
            //String jsonObject = restTemplate.postForObject(urlConfig.getPushUrl(), new HttpEntity<>(json, headers), String.class);


            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
        } catch (Exception e) {
            logger.error("货赔管理，发送公众号信息失败！");
            e.printStackTrace();
        }

    }

    @Async
    public void pushMsgToApp(BtyGoodsPay btyGoodsPay, String dzMobile) {

        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
            //json.put("",);

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", dzMobile);//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17865157029");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "2");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            //paramMap.add("temType", 1);//	是	Integer	消息模板类型 微信公众号消息时：1.审核结果通知模板 2.查询结果通知模板
            paramMap.add("title", "货赔录入提示");//	是	String	消息标题
            paramMap.add("catCode", 3);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加
            paramMap.add("contentTitle", "货赔录入");//	是	String	发布标题
            //paramMap.add("content", "门店：" + btyGoodsPay.getDm());//
            paramMap.add("pushContent", "货赔提醒：门店\"" + btyGoodsPay.getDm() + "\"，您有需要分配的货赔，请尽快处理！点击此消息查看...");
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);

            String customField = "";
            customField = customField + "router=com.bantianyao.video.ui.compensation.ui.CompensationDetailsActivity," +
                    "id=" + btyGoodsPay.getId().toString() + "," +
                    "dm=" + btyGoodsPay.getDm() + "," +
                    "mdbh=" + btyGoodsPay.getMdbh() + "," +
                    "sumMoney=" + btyGoodsPay.getSumMoney().toString() + "," +
                    "extra_date=" + btyGoodsPay.getMonth();
            paramMap.add("customFieldVal", customField);

            RestTemplate restTemplate = new RestTemplate();
            //String jsonObject = restTemplate.postForObject(urlConfig.getPushUrl(), new HttpEntity<>(json, headers), String.class);


            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
        } catch (Exception e) {
            logger.error("货赔管理，发送信息到小妖app失败！");
            e.printStackTrace();
        }


    }

    @Async
    public void pushMsgToIM(BtyGoodsPay btyGoodsPay, String dzMobile) {

        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
            //json.put("",);

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", dzMobile);//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17865157029");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "3");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            //paramMap.add("temType", 1);//	是	Integer	消息模板类型 微信公众号消息时：1.审核结果通知模板 2.查询结果通知模板
            paramMap.add("title", "货赔录入提示");//	是	String	消息标题
            paramMap.add("catCode", 3);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加
            paramMap.add("contentTitle", "货赔录入");//	是	String	发布标题
            paramMap.add("pushContent", "门店：" + btyGoodsPay.getDm());
            //货赔提醒：门店“半天妖泰安中百店”，您有需要分配的货赔，请尽快处理！点击此消息查看...
            paramMap.add("imContent", "货赔提醒：门店\"" + btyGoodsPay.getDm() + "\"，您有需要分配的货赔，请尽快处理！点击此消息查看...");
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);
            RestTemplate restTemplate = new RestTemplate();
            //String jsonObject = restTemplate.postForObject(urlConfig.getPushUrl(), new HttpEntity<>(json, headers), String.class);


            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
        } catch (Exception e) {
            logger.error("货赔管理，发送信息到小妖IM失败！");
            e.printStackTrace();
        }


    }

    /**
     * 网上建店（外卖）消息APP
     *
     * @param gcgWsjd
     * @param mobile
     */
    @Async
    public void pushToApp(GcgWsjd gcgWsjd, String mobile, String sta) {

        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", mobile);//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17865157029");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
//                paramMap.add("mobiles", "18553839555");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "2");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            paramMap.add("title", "网上建店");//	是	String	消息标题
            paramMap.add("catCode", 4);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加 4.工程推送提醒
            paramMap.add("contentTitle", "网上建店");//	是	String	发布标题
//            paramMap.add("pushContent", "门店：" + gcgWsjd.getMingcheng());
            String msg = "";
            if (sta.equals("通过")) {
                msg = "网上建店 “外卖”：</br> 负责人“韩铭渲”已通过！<font color='blue'>点击此消息查看...</font>";
            } else {
                if (gcgWsjd.getReason().isEmpty()) {
                    msg = "网上建店 “外卖”：</br> 负责人“韩铭渲”已驳回，请及时处理，<font color='blue'>点击此消息查看...</font>";
                } else {
                    msg = "网上建店 “外卖”：</br> 负责人“韩铭渲”已驳回，驳回原因：" + gcgWsjd.getReason() + "，请及时处理，<font color='blue'>点击此消息查看...</font>";
                }
            }

            paramMap.add("pushContent", "门店：“" + gcgWsjd.getMingcheng() + "”，" + msg);

//            paramMap.add("imContent", msg + "门店：" + gcgWsjd.getMingcheng());
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);

            String customField = "";
            customField = customField + "router=com.bantianyao.video.buildshop.ui.BuildShopActivity," +
                    "gcg_project_id=" + gcgWsjd.getGcgProjectId().toString() + "," +
                    "mingcheng=" + gcgWsjd.getMingcheng() + "," +
                    "yaoma=" + gcgWsjd.getYaoma() + "," +
                    "gcg_wsjd_id=" + gcgWsjd.getGcgWsjdId().toString() + "," +
                    "extra_shop_status=" + gcgWsjd.getShStatus() + "," +
                    "jumpType=2";//jumpType 0.美团 1.口碑 2.外卖
            paramMap.add("customFieldVal", customField);


            RestTemplate restTemplate = new RestTemplate();

            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
        } catch (Exception e) {
            logger.error("网上建店，发送信息到小妖app失败！");
            e.printStackTrace();
        }

    }

    /**
     * 网上建店（外卖）消息IM
     *
     * @param gcgWsjd
     * @param mobile
     * @param sta
     */
    @Async
    public void pushToIM(GcgWsjd gcgWsjd, String mobile, String sta, String time) {

        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
            //json.put("",);

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", mobile);//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17865157029");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
//                paramMap.add("mobiles", "18553839555");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "3");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            //paramMap.add("temType", 1);//	是	Integer	消息模板类型 微信公众号消息时：1.审核结果通知模板 2.查询结果通知模板
            paramMap.add("title", "网上建店");//	是	String	消息标题
            paramMap.add("catCode", 4);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加 4.工程推送提醒
            paramMap.add("contentTitle", "网上建店");//	是	String	发布标题
            paramMap.add("pushContent", "门店：" + gcgWsjd.getMingcheng());
            String msg = "";
            if (sta.equals("通过")) {
                msg = time + "</br>网上建店 “外卖”：门店：“" + gcgWsjd.getMingcheng() + "” </br>负责人“韩铭渲”已通过！<font color='blue'>点击此消息查看...</font>";
            } else {
                if (gcgWsjd.getReason().isEmpty()) {
                    msg = time + "</br>网上建店 “外卖”：门店：“" + gcgWsjd.getMingcheng() + "” </br>负责人“韩铭渲”已驳回，请及时处理，<font color='blue'>点击此消息查看...</font>";
                } else {
                    msg = time + "</br>网上建店 “外卖”：门店：“" + gcgWsjd.getMingcheng() + "” </br>负责人“韩铭渲”已驳回，驳回原因：" + gcgWsjd.getReason() + "，请及时处理，<font color='blue'>点击此消息查看...</font>";
                }
            }
            paramMap.add("imContent", msg);
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);

            String customField = "";
            customField = customField + "router=com.bantianyao.video.buildshop.ui.BuildShopActivity," +
                    "gcg_project_id=" + gcgWsjd.getGcgProjectId().toString() + "," +
                    "mingcheng=" + gcgWsjd.getMingcheng() + "," +
                    "yaoma=" + gcgWsjd.getYaoma() + "," +
                    "gcg_wsjd_id=" + gcgWsjd.getGcgWsjdId().toString() + "," +
                    "extra_shop_status=" + gcgWsjd.getShStatus() + "," +
                    "jumpType=2";//jumpType 0.美团 1.口碑 2.外卖;
            paramMap.add("customFieldVal", customField);

            RestTemplate restTemplate = new RestTemplate();
            //String jsonObject = restTemplate.postForObject(urlConfig.getPushUrl(), new HttpEntity<>(json, headers), String.class);


            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
        } catch (Exception e) {
            logger.error("网上建店，发送信息到小妖IM失败！");
            e.printStackTrace();
        }


    }

    /**
     * 网上建店（美团团购）消息IM
     *
     * @param gcgWsjd
     * @param mobile
     * @param sta
     */
    @Async
    public void mttgToIM(GcgWsjd gcgWsjd, String mobile, String sta, String time) {

        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
            //json.put("",);

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", mobile);//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17865157029");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
//                paramMap.add("mobiles", "18553839555");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "3");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            //paramMap.add("temType", 1);//	是	Integer	消息模板类型 微信公众号消息时：1.审核结果通知模板 2.查询结果通知模板
            paramMap.add("title", "美团团购");//	是	String	消息标题
            paramMap.add("catCode", 4);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加 4.工程推送提醒
            paramMap.add("contentTitle", "美团团购");//	是	String	发布标题
            paramMap.add("pushContent", "门店：" + gcgWsjd.getMingcheng());
            String msg = "";
            if (sta.equals("通过")) {
                msg = time + "</br>网上建店 “美团团购”：门店：“" + gcgWsjd.getMingcheng() + "” </br>负责人“谢良玉”已通过！<font color='blue'>点击此消息查看...</font>";
            } else {
                if (gcgWsjd.getReason().isEmpty()) {
                    msg = time + "</br>网上建店 “美团团购”：门店：“" + gcgWsjd.getMingcheng() + "” </br>负责人“谢良玉”已驳回，请及时处理，<font color='blue'>点击此消息查看...</font>";
                } else {
                    msg = time + "</br>网上建店 “美团团购”：门店：“" + gcgWsjd.getMingcheng() + "” </br>负责人“谢良玉”已驳回，驳回原因：" + gcgWsjd.getReason() + "，请及时处理，<font color='blue'>点击此消息查看...</font>";
                }
            }
            paramMap.add("imContent", msg);
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);

            String customField = "";
            customField = customField + "router=com.bantianyao.video.buildshop.ui.BuildShopActivity," +
                    "gcg_project_id=" + gcgWsjd.getGcgProjectId().toString() + "," +
                    "mingcheng=" + gcgWsjd.getMingcheng() + "," +
                    "yaoma=" + gcgWsjd.getYaoma() + "," +
                    "gcg_wsjd_id=" + gcgWsjd.getGcgWsjdId().toString() + "," +
                    "extra_shop_status=" + gcgWsjd.getShStatus() + "," +
                    "jumpType=0";//jumpType 0.美团 1.口碑 2.外卖;
            paramMap.add("customFieldVal", customField);

            RestTemplate restTemplate = new RestTemplate();
            //String jsonObject = restTemplate.postForObject(urlConfig.getPushUrl(), new HttpEntity<>(json, headers), String.class);


            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
        } catch (Exception e) {
            logger.error("网上建店，发送信息到小妖IM失败！");
            e.printStackTrace();
        }


    }

    /**
     * 工程总监审核消息APP
     *
     * @param project
     * @param mobile
     */
    @Async
    public void pushGcToApp(Project project, String mobile, Integer sta) {

        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", mobile);//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17864739382");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "2");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            paramMap.add("title", "工程总监确认");//	是	String	消息标题
            paramMap.add("catCode", 4);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加 4.工程推送提醒
            paramMap.add("contentTitle", "工程总监确认");//	是	String	发布标题
            paramMap.add("pushContent", "门店：" + project.getName());
            String msg = "";
            if (sta.equals("通过")) {
                msg = "工程总监确认：外卖/美团负责人韩铭渲已通过！";
            } else {
                if (project.getReason().isEmpty()) {
                    msg = "工程总监确认：外卖/美团负责人韩铭渲已驳回，请进入网上建店及时处理！";
                } else {
                    msg = "工程总监确认：外卖/美团负责人韩铭渲已驳回，驳回原因：" + project.getReason() + ",请进入网上建店及时处理！";
                }
            }
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);

            RestTemplate restTemplate = new RestTemplate();

            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
        } catch (Exception e) {
            logger.error("工程总监确认，发送信息到小妖app失败！");
            e.printStackTrace();
        }

    }

    /**
     * 考勤驳回信息推送，
     * 需要的参数，
     * 1，店铺名称,
     * 2，店长电话,
     * 3，提示消息,
     *
     * @param ShopName
     * @param dzMobile
     * @param msgTime
     */
    @Async
    public void attendAuditPushMsgToIM(String ShopName, String dzMobile, String msgTime) {

        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
            //json.put("",);

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", dzMobile);//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17865157029");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "3");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            //paramMap.add("temType", 1);//	是	Integer	消息模板类型 微信公众号消息时：1.审核结果通知模板 2.查询结果通知模板
            paramMap.add("title", "考勤提醒");//	是	String	消息标题
            paramMap.add("catCode", 5);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加
            paramMap.add("contentTitle", "考勤提醒");//	是	String	发布标题
            //门店
            paramMap.add("pushContent", "门店：" + ShopName);
            //“上海崇明万达店”2021年9月考勤被督导驳回，请及时修改并重新提交，点击进入..
            paramMap.add("imContent", "考勤提醒：门店\"" + ShopName + "\"，" + msgTime + "考勤被督导驳回，请及时修改并重新提交，点击进入...");
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);
            String customField = "";
            customField = customField + "router=com.bantianyao.video.ui.shopcheck.ui.ShopCheckListActivity";
            //跳转路由地址！
            paramMap.add("customFieldVal", customField);

            RestTemplate restTemplate = new RestTemplate();
            //String jsonObject = restTemplate.postForObject(urlConfig.getPushUrl(), new HttpEntity<>(json, headers), String.class);


            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
        } catch (Exception e) {
            logger.error("考勤提醒，发送信息到小妖IM失败！");
            e.printStackTrace();
        }
    }


    /**
     * 考勤指定店长的推送，
     * 需要的参数，
     * 1，店铺名称,
     * 2，店长电话,
     * 3，提示消息,
     *
     * @param ShopName
     * @param dzMobile
     */
    @Async
    public void attendAuditSetDzPushMsgToIM(String ShopName, String dzMobile, String kqDz, String ddXm) {
        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
            //json.put("",);

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", dzMobile);//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17865157029");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "3");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            //paramMap.add("temType", 1);//	是	Integer	消息模板类型 微信公众号消息时：1.审核结果通知模板 2.查询结果通知模板
            paramMap.add("title", "考勤提醒");//	是	String	消息标题
            paramMap.add("catCode", 5);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加
            paramMap.add("contentTitle", "考勤提醒");//	是	String	发布标题
            //门店
            paramMap.add("pushContent", "门店：" + ShopName);
            //修改店长小妖通知推送提醒：“xxx”您好，“xxx”已指定您为“上海崇明万达店”的店长，请在每月月底最后一天，和下月初的1号、2号做本店考勤，点击进入...
            paramMap.add("imContent", "\"" + kqDz + "\" 您好，\"" + ddXm + "\"已指定您为\"" + ShopName + "\"的店长，请在每月月底最后一天，和下月初的1号、2号做本店考勤，点击进入..");
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);
            String customField = "";
            customField = customField + "router=com.bantianyao.video.ui.shopcheck.ui.EmployeeFileActivity";
            //跳转路由地址！
            paramMap.add("customFieldVal", customField);

            RestTemplate restTemplate = new RestTemplate();
            //String jsonObject = restTemplate.postForObject(urlConfig.getPushUrl(), new HttpEntity<>(json, headers), String.class);


            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
        } catch (Exception e) {
            logger.error("考勤提醒，发送信息到小妖IM失败！");
            e.printStackTrace();
        }
    }


    /**
     * 考勤未完成提醒
     * 需要的参数，
     * 1，店铺名称,
     * 2，店长电话,
     * 3，提示消息,
     *
     * @param ShopName
     * @param dzMobile
     * @param msgTime
     */
    @Async
    public void attendAuditTimePushMsgToIM(String ShopName, String dzMobile, String msgTime) {

        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
            //json.put("",);

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", dzMobile);//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17865157029");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "3");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            //paramMap.add("temType", 1);//	是	Integer	消息模板类型 微信公众号消息时：1.审核结果通知模板 2.查询结果通知模板
            paramMap.add("title", "考勤提醒");//	是	String	消息标题
            paramMap.add("catCode", 5);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加
            paramMap.add("contentTitle", "考勤提醒");//	是	String	发布标题
            //门店
            paramMap.add("pushContent", "门店：" + ShopName);
            //“上海崇明万达店”2021年9月考勤被督导驳回，请及时修改并重新提交，点击进入..
            paramMap.add("imContent", "考勤提醒：" + msgTime + "考勤信息还未提交，请按时填写本店考勤信息并提交督导审核...");
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);
            String customField = "";
            customField = customField + "router=com.bantianyao.video.ui.shopcheck.ui.EmployeeFileActivity";
            //跳转路由地址！
            paramMap.add("customFieldVal", customField);

            RestTemplate restTemplate = new RestTemplate();
            //String jsonObject = restTemplate.postForObject(urlConfig.getPushUrl(), new HttpEntity<>(json, headers), String.class);


            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
        } catch (Exception e) {
            logger.error("考勤提醒，发送信息到小妖IM失败！");
            e.printStackTrace();
        }
    }


    /**
     * 门店营业额对账推送店长APP消息
     *
     * @param mdYydz
     * @param param
     */
    @Async
    public void yydzToIM(BtyMdYydz mdYydz, BtyMdYydzDetailParam param, String time) {

        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", mdYydz.getDzTel());//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17865157029");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
//                paramMap.add("mobiles", "18553839555");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "3");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            //paramMap.add("temType", 1);//	是	Integer	消息模板类型 微信公众号消息时：1.审核结果通知模板 2.查询结果通知模板
            paramMap.add("title", "门店营业额对账");//	是	String	消息标题
            paramMap.add("catCode", 4);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加 4.工程推送提醒
            paramMap.add("contentTitle", "门店营业额对账");//	是	String	发布标题
            paramMap.add("pushContent", "门店：" + mdYydz.getDm());
            String msg = "";
            if (ToolUtil.isNotEmpty(mdYydz.getYskj())){
                msg = time + "您的应收会计" + mdYydz.getYskj() + "提醒您，“" + param.getCwApprove() + "”，请尽快回复，<font color='blue'>点击进入...</font>";
            }else {
                msg = time + "您的应收会计提醒您，“" + param.getCwApprove() + "”，请尽快回复，<font color='blue'>点击进入...</font>";
            }

            paramMap.add("imContent", msg);
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);

            String customField = "";
            customField = customField + "router=com.bantianyao.video.ui.matter.businessaccount.ui.TurnoverReportQuestionActivity";
            paramMap.add("customFieldVal", customField);//跳转路由地址！

            RestTemplate restTemplate = new RestTemplate();

            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
            logger.info("----------" +paramMap.toString());
        } catch (Exception e) {
            logger.error("门店营业额对账，发送信息到小妖IM失败！");
            e.printStackTrace();
        }
    }

    /**
     * 门店营业额对账推送督导APP消息
     *
     * @param mdYydz
     * @param param
     */
    @Async
    public void yyddToIM(BtyMdYydz mdYydz, BtyMdYydzDetailParam param, String time) {

        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", mdYydz.getDdTel());//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17865157029");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
//                paramMap.add("mobiles", "18553839555");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "3");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            //paramMap.add("temType", 1);//	是	Integer	消息模板类型 微信公众号消息时：1.审核结果通知模板 2.查询结果通知模板
            paramMap.add("title", "门店营业额对账");//	是	String	消息标题
            paramMap.add("catCode", 4);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加 4.工程推送提醒
            paramMap.add("contentTitle", "门店营业额对账");//	是	String	发布标题
            paramMap.add("pushContent", "门店：" + mdYydz.getDm());
            String msg = "";
            if (ToolUtil.isNotEmpty(mdYydz.getYskj())){
                msg = time + "应收会计" + mdYydz.getYskj() + "提醒您，您的" + mdYydz.getDm() + "，“" + param.getCwApprove() + "”，请尽快联系店长" + mdYydz.getDz() + "处理！";
            }else {
                msg = time + "应收会计提醒您，您的" + mdYydz.getDm() + "，“" + param.getCwApprove() + "”，请尽快联系店长" + mdYydz.getDz() + "处理！";
            }

            paramMap.add("imContent", msg);
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);

//            String customField = "";
//            customField = customField + "router=com.bantianyao.video.ui.matter.businessaccount.ui.TurnoverReportQuestionActivity";
//            paramMap.add("customFieldVal", customField);

            RestTemplate restTemplate = new RestTemplate();

            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
        } catch (Exception e) {
            logger.error("门店营业额对账，发送信息到小妖IM失败！");
            e.printStackTrace();
        }
    }


    /**
     * 货赔表推送店长APP消息
     *
     */
    @Async
    public void huopeiToIM(Map map, String time) {

        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", map.get("shopowner"));//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17864739382");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
//                paramMap.add("mobiles", "18553839555");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "3");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            //paramMap.add("temType", 1);//	是	Integer	消息模板类型 微信公众号消息时：1.审核结果通知模板 2.查询结果通知模板
            paramMap.add("title", "货赔表");//	是	String	消息标题
            paramMap.add("catCode", 4);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加 4.工程推送提醒
            paramMap.add("contentTitle", "货赔表");//	是	String	发布标题
            paramMap.add("pushContent", "门店：" + map.get("name"));
            String msg = time + "货赔表已生成，<font color='blue'>点击进入...</font>";

            paramMap.add("imContent", msg);
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);

            String customField = "";
            customField = customField + "router=com.bantianyao.video.ui.financialstatements.ui.GoodsCompensateActivity," +
            "extra_yao_ma=" + map.get("yaoma") + "," +
            "extra_shop_name=" + map.get("name");
            paramMap.add("customFieldVal", customField);//跳转路由地址！

            RestTemplate restTemplate = new RestTemplate();

            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
            logger.info("----------" +paramMap.toString());
        } catch (Exception e) {
            logger.error("货赔表，发送信息到小妖IM失败！");
            e.printStackTrace();
        }
    }

    /**
     * 股份转让推送受让方APP消息
     *
     */
    @Async
    public void gufeneiToIM(Map map, String time) {

        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", map.get("srTel"));//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17864739382");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
//                paramMap.add("mobiles", "18553839555");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：培训系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "3");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            //paramMap.add("temType", 1);//	是	Integer	消息模板类型 微信公众号消息时：1.审核结果通知模板 2.查询结果通知模板
            paramMap.add("title", "股份转让");//	是	String	消息标题
            paramMap.add("catCode", 4);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加 4.工程推送提醒
            paramMap.add("contentTitle", "股份转让");//	是	String	发布标题
            paramMap.add("pushContent", "门店：" + map.get("dm"));

            String msg = time + map.get("dm") + "的股份转让，"+ map.get("name") + "已驳回，<font color='blue'>点击进入...</font>";
            if (ToolUtil.isNotEmpty(map.get("reason"))){
                msg = time + map.get("dm") + "的股份转让，"+ map.get("name") + "已驳回，原因“" + map.get("reason") + "”，<font color='blue'>点击进入...</font>";
            }

            paramMap.add("imContent", msg);
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);

            String customField = "";
            customField = customField + "router=com.bantianyao.video.ui.turn.ui.SharesTurnApprovalActivity,shStatus=4";
            paramMap.add("customFieldVal", customField);//跳转路由地址！

            RestTemplate restTemplate = new RestTemplate();

            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
            logger.info("----------" +paramMap.toString());
        } catch (Exception e) {
            logger.error("股份转让，发送信息到小妖IM失败！");
            e.printStackTrace();
        }
    }
    /**
     * 店内现金交账给店长推送APP畅聊消息
     *
     */
    public void xjjzPushMsgToIM(String shopName,String yaoma, String dzMobile) {
        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
            //json.put("",);

            if (taskConfig.getRun().equals("y")) {
                paramMap.add("sysCode", "1");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
                paramMap.add("mobiles", dzMobile);//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
            } else {
                paramMap.add("mobiles", "17686420611");//	是	String	接收人手机号，多个时用引文逗号隔开，不要有空格
                paramMap.add("sysCode", "4");//	是	String	系统编号，目前有的勿动， 1：营业系统 2：营业系统 3：供应链系统，如需其它在消息管理平台添加
            }
            paramMap.add("sendType", "1");//	是	String	发送方式 1：直接发送 2：定时发送（调用此接口一方是通过定时任务跑时）
            paramMap.add("receiveMode", "3");//	是	String	推送终端 1：微信公众号 2:小妖APP 3:小妖IM,如需其它在消息管理平台添加
            //paramMap.add("temType", 1);//	是	Integer	消息模板类型 微信公众号消息时：1.审核结果通知模板 2.查询结果通知模板
            paramMap.add("title", "店内现金交账提醒");//	是	String	消息标题
            paramMap.add("catCode", 5);//	是	String	消息类型编号，使用时按照实际情况在消息管理系统添加
            paramMap.add("contentTitle", "店内现金交账提醒");//	是	String	发布标题
            //门店
            paramMap.add("pushContent", "门店："+shopName+"现金交账提醒");
            //“上海崇明万达店”2021年9月考勤被督导驳回，请及时修改并重新提交，点击进入..
            paramMap.add("imContent", "请及时缴纳现金，点击进入...");
            paramMap.add("pushMessageType", 0);
            paramMap.add("pushType", 0);
            String customField = "";
            customField = customField + "router=com.bantianyao.video.ui.cashinstore.ui.PayCashForShopMgrSingleActivity,"+
                    "extra_yao_ma=" + yaoma + "," +
                    "extra_shop_name=" + shopName;
            //跳转路由地址！
            paramMap.add("customFieldVal", customField);

            RestTemplate restTemplate = new RestTemplate();
            //String jsonObject = restTemplate.postForObject(urlConfig.getPushUrl(), new HttpEntity<>(json, headers), String.class);


            // 1、使用postForObject请求接口
            String result = restTemplate.postForObject(urlConfig.getPushToAppUrl(), paramMap, String.class);
            System.out.println("请求结果==================" + result);
        } catch (Exception e) {
            logger.error("店内现金交账提醒，发送信息到小妖IM失败！");
            e.printStackTrace();
        }
    }

}
